<template>
      <input type="file" @change="handleFile" />
      <div v-if="stats.length">
        <h3>统计结果</h3>
        <div v-for="(stat, index) in stats" :key="index">
          <p>列 {{ index + 1 }}:</p >
          <ul>
            <li>平均值: {{ stat.average }}</li>
            <li>最大值: {{ stat.max }}</li>
            <li>最小值: {{ stat.min }}</li>
            <li>方差: {{ stat.variance }}</li>
          </ul>
        </div>
      </div>
    </template>
    
    <script setup>
    import { ref } from 'vue';
    import * as XLSX from 'xlsx';
    
    const stats = ref([]);
    
    // 计算平均值
    const calculateAverage = (data) => data.reduce((acc, curr) => acc + curr, 0) / data.length;
    
    // 计算方差
    const calculateVariance = (data, average) =>
      data.reduce((acc, curr) => acc + (curr - average) ** 2, 0) / data.length;
    
    // 从文件中读取并解析Excel
    const handleFile = (event) => {
      const file = event.target.files[0];
      const reader = new FileReader();
      reader.onload = (e) => {
        const data = new Uint8Array(e.target.result);
        const workbook = XLSX.read(data, { type: 'array' });
        const sheetName = workbook.SheetNames[0];
        const worksheet = workbook.Sheets[sheetName];
        const json = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); // 转换为数组的数组
        processSheetData(json);
      };
      reader.readAsArrayBuffer(file);
    };
    
    // 处理Excel数据并计算统计信息
    const processSheetData = (sheetData) => {
      stats.value = []; // 重置统计数据
    
      // 假设数据开始于第三行，第二列（根据提供的模板）
      const startRow = 2;
      const startCol = 1;
    
      // 动态获取列的数量（减去1是因为index从0开始）
      const numberOfColumns = sheetData[0].length - 1;
    
      // 遍历每一列，跳过标题行
      for (let i = startCol; i <= numberOfColumns; i++) {
        // 提取每列的数据（跳过标题行）
        const columnData = sheetData.slice(startRow).map(row => parseFloat(row[i]) || 0);
    
        // 计算统计数据
        const average = calculateAverage(columnData);
        const max = Math.max(...columnData);
        const min = Math.min(...columnData);
        const variance = calculateVariance(columnData, average);
    
        // 存储统计数据
        stats.value.push({ average, max, min, variance });
      }
    };
    </script>
    
    <style scoped>
    /* 这里添加样式 */
    </style>
    